Saving Graphs to File

#ggsave(FILENAME_HERE, PLOT_OBJECT_HERE)
ggsave("my_plot.png", p)
Saving 7 x 7 in image

Scales; Colour

Scale functions in ggplot2 take the form scale_[aesthetic]_[mapping]().

Let’s first focus on the following plot:

  1. Change the y-axis tick mark spacing to 10; change the colour spacing to include all powers of 10.

  1. Specify scales::*_format in the labels argument of a scale function to do the following:
    • Change the x-axis labels to dollar format (use scales::dollar_format())
    • Change the colour labels to comma format (use scales::comma_format())

  1. Use RColorBrewer to change the colour scheme.
    • Notice the three different types of scales: sequential, diverging, and continuous.

  1. Use viridis to change the colour to a colour-blind friendly scheme
    • Hint: add scale_colour_viridis_c (c stands for continuous; d discrete).
    • You can choose a palette with option.

Theming

Changing the look of a graphic can be achieved through the theme() layer.

There are “complete themes” that come with ggplot2, my favourite being theme_bw (I’ve grown tired of the default gray background, so theme_bw is refreshing).

  1. Change the theme of the following plot to theme_bw():

  1. Then, change font size of axis labels, and the strip background colour. Others?

Plotly

Consider the following plot:

  1. Convert it to a plotly object by applying the ggplotly() function:
install.packages("plotly")
library(plotly)
ggplotly(p)

#or
htmlwidgets::SaveWidgets("Locat")
  1. You can save a plotly graph locally as an html file. Try saving the above:
    • NOTE: plotly graphs don’t seem to show up in Rmd notebooks, but they do with Rmd documents.
p %>% 
    ggplotly() %>% 
    htmlwidgets::saveWidget("LOCATION_GOES_HERE")
  1. Run this code to see the json format underneath:
  1. Check out code to make a plotly object from scratch using plot_ly() – scatterplot of gdpPercap vs lifeExp.
  1. Add population to form a z-axis for a 3D plot:
LS0tCnRpdGxlOiAiY20wMTMgRXhlcmNpc2UiCm91dHB1dDogaHRtbF9ub3RlYm9vawplZGl0b3Jfb3B0aW9uczogCiAgY2h1bmtfb3V0cHV0X3R5cGU6IGlubGluZQotLS0KCmBgYHtyfQpzdXBwcmVzc1BhY2thZ2VTdGFydHVwTWVzc2FnZXMobGlicmFyeSh0aWR5dmVyc2UpKQpsaWJyYXJ5KGdhcG1pbmRlcikKYGBgCgoKIyBTYXZpbmcgR3JhcGhzIHRvIEZpbGUKCi0gRG9uJ3QgdXNlIHRoZSBtb3VzZQotIFVzZSBgZ2dzYXZlYCBmb3IgZ2dwbG90CiAgICAtIFByYWN0aWNlIGJ5IHNhdmluZyB0aGUgZm9sbG93aW5nIHBsb3QgdG8gZmlsZTogCgpgYGB7cn0KcCA8LSBnZ3Bsb3QobXRjYXJzLCBhZXMoaHAsIHd0KSkgKyAKICAgIGdlb21fcG9pbnQoKQojZ2dzYXZlKEZJTEVOQU1FX0hFUkUsIFBMT1RfT0JKRUNUX0hFUkUpCmdnc2F2ZSgibXlfcGxvdC5wbmciLCBwKQpgYGAKCi0gQmFzZSBSIHdheTogcHJpbnQgcGxvdHMgInRvIHNjcmVlbiIsIHNhbmR3aWNoZWQgYmV0d2VlbiBgcGRmKClgL2BqcGVnKClgL2BwbmcoKWAuLi4gYW5kIGBkZXYub2ZmKClgLiAKLSBWZWN0b3IgdnMuIHJhc3RlcjogSW1hZ2VzIGFyZSBzdG9yZWQgb24geW91ciBjb21wdXRlciBhcyBlaXRoZXIgX3ZlY3Rvcl8gb3IgX3Jhc3Rlcl8uCiAgICAtIF9fUmFzdGVyX186IGFuIGBuYCBieSBgbWAgZ3JpZCBvZiBwaXhlbHMsIGVhY2ggd2l0aCBpdHMgb3duIGNvbG91ci4gYGpwZWdgLCBgcG5nYCwgYGdpZmAsIGBibXBgLgogICAgLSBfX1ZlY3Rvcl9fOiByZXByZXNlbnRlZCBhcyBzaGFwZXMgYW5kIGxpbmVzLiBgcGRmYCwgW2BzdmdgXShodHRwczovL3d3dy53M3NjaG9vbHMuY29tL2dyYXBoaWNzL3N2Z19pbnRyby5hc3ApLgogICAgLSBGb3IgdGlwczogWyIxMCB0aXBzIGZvciBtYWtpbmcgeW91ciBSIGdyYXBoaWNzIGxvb2sgdGhlaXIgYmVzdCIiXShodHRwOi8vYmxvZy5yZXZvbHV0aW9uYW5hbHl0aWNzLmNvbS8yMDA5LzAxLzEwLXRpcHMtZm9yLW1ha2luZy15b3VyLXItZ3JhcGhpY3MtbG9vay10aGVpci1iZXN0Lmh0bWwpLgogICAgCiMgU2NhbGVzOyBDb2xvdXIKClNjYWxlIGZ1bmN0aW9ucyBpbiBgZ2dwbG90MmAgdGFrZSB0aGUgZm9ybSBgc2NhbGVfW2Flc3RoZXRpY11fW21hcHBpbmddKClgLgoKTGV0J3MgZmlyc3QgZm9jdXMgb24gdGhlIGZvbGxvd2luZyBwbG90OgoKYGBge3J9CnBfc2NhbGVzIDwtIGdncGxvdChnYXBtaW5kZXIsIGFlcyhnZHBQZXJjYXAsIGxpZmVFeHApKSArCiAgICAgZ2VvbV9wb2ludChhZXMoY29sb3VyPXBvcCksIGFscGhhPTAuMikKcF9zY2FsZXMgKyAKICAgIHNjYWxlX3hfbG9nMTAoKSArCiAgICBzY2FsZV9jb2xvdXJfY29udGludW91cyh0cmFucz0ibG9nMTAiKSAjbm8gc2NhbGVfY29sb3VyX2xvZzEwCmBgYAoKMS4gQ2hhbmdlIHRoZSB5LWF4aXMgdGljayBtYXJrIHNwYWNpbmcgdG8gMTA7IGNoYW5nZSB0aGUgY29sb3VyIHNwYWNpbmcgdG8gaW5jbHVkZSBhbGwgcG93ZXJzIG9mIDEwLgoKYGBge3J9CnBfc2NhbGVzICsKICAgIHNjYWxlX3hfbG9nMTAoKSArCiAgICBzY2FsZV9jb2xvdXJfY29udGludW91cygKICAgICAgICB0cmFucyAgPSAibG9nMTAiLCAKICAgICAgICBicmVha3MgPSAxMF4oMToxMCkKICAgICkgKwogICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzPTE6MTAgKiAxMCkKYGBgCgoyLiBTcGVjaWZ5IGBzY2FsZXM6OipfZm9ybWF0YCBpbiB0aGUgYGxhYmVsc2AgYXJndW1lbnQgb2YgYSBzY2FsZSBmdW5jdGlvbiB0byBkbyB0aGUgZm9sbG93aW5nOgogICAgLSBDaGFuZ2UgdGhlIHgtYXhpcyBsYWJlbHMgdG8gZG9sbGFyIGZvcm1hdCAodXNlIGBzY2FsZXM6OmRvbGxhcl9mb3JtYXQoKWApCiAgICAtIENoYW5nZSB0aGUgY29sb3VyIGxhYmVscyB0byBjb21tYSBmb3JtYXQgKHVzZSBgc2NhbGVzOjpjb21tYV9mb3JtYXQoKWApCgpgYGB7cn0KbGlicmFyeShzY2FsZXMpCmluc3RhbGwucGFja2FnZXMoc2NhbGVzKQpwX3NjYWxlcyArCiAgICBzY2FsZV94X2xvZzEwKGxhYmVscz1kb2xsYXJfZm9ybWF0KCkpICsKICAgIHNjYWxlX2NvbG91cl9jb250aW51b3VzKAogICAgICAgIHRyYW5zICA9ICJsb2cxMCIsIAogICAgICAgIGJyZWFrcyA9IDEwXigxOjEwKSwKICAgICAgICBsYWJlbHMgPSBjb21tYV9mb3JtYXQoKQogICAgKSArCiAgICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzPTEwKigxOjEwKSkKYGBgCgozLiBVc2UgYFJDb2xvckJyZXdlcmAgdG8gY2hhbmdlIHRoZSBjb2xvdXIgc2NoZW1lLgogICAgLSBOb3RpY2UgdGhlIHRocmVlIGRpZmZlcmVudCB0eXBlcyBvZiBzY2FsZXM6IHNlcXVlbnRpYWwsIGRpdmVyZ2luZywgYW5kIGNvbnRpbnVvdXMuCgpgYGB7cn0KIyMgQWxsIHBhbGV0dGVzIHRoZSBjb21lIHdpdGggUkNvbG9yQnJld2VyOgojcXVhbnRpdGlhdGl2ZSB2cy4gc2VxdWVudGlhbCBjb2xvdXIgcGFsZXR0ZQpSQ29sb3JCcmV3ZXI6OmRpc3BsYXkuYnJld2VyLmFsbCgpCiNpbnN0YWxsLnBhY2thZ2VzKFJDb2xvckJyZXdlcikKcF9zY2FsZXMgKwogICAgc2NhbGVfeF9sb2cxMChsYWJlbHM9ZG9sbGFyX2Zvcm1hdCgpKSArCiAgc2NhbGVfY29sb3VyX2Rpc3RpbGxlcigKICAgICAgICB0cmFucyAgID0gImxvZzEwIiwKICAgICAgICBicmVha3MgID0gMTBeKDE6MTApLAogICAgICAgIGxhYmVscyAgPSBjb21tYV9mb3JtYXQoKSwKICAgICAgICBwYWxldHRlID0gIkdyZWVucyIKICAgICkgKwogICAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcz0xMCooMToxMCkpCmBgYAoKNC4gVXNlIGB2aXJpZGlzYCB0byBjaGFuZ2UgdGhlIGNvbG91ciB0byBhIGNvbG91ci1ibGluZCBmcmllbmRseSBzY2hlbWUKICAgIC0gSGludDogYWRkIGBzY2FsZV9jb2xvdXJfdmlyaWRpc19jYCAoYGNgIHN0YW5kcyBmb3IgY29udGludW91czsgYGRgIGRpc2NyZXRlKS4KICAgIC0gWW91IGNhbiBjaG9vc2UgYSBwYWxldHRlIHdpdGggYG9wdGlvbmAuCgpgYGB7cn0KcF9zY2FsZXMgKwogICAgc2NhbGVfeF9sb2cxMChsYWJlbHM9ZG9sbGFyX2Zvcm1hdCgpKSArCiAgICBzY2FsZV9jb2xvdXJfdmlyaWRpc19jKCkKICAgICAgICB0cmFucyAgID0gImxvZzEwIiwKICAgICAgICBicmVha3MgID0gMTBeKDE6MTApLAogICAgICAgIGxhYmVscyAgPSBjb21tYV9mb3JtYXQoKQogICAgKSArCiAgICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzPTEwKigxOjEwKSkKCiNUaGVyZSBpcyBhbHNvIGEgc2NhbGVfZmlsbCBzZXQgb2YgZnVuY3Rpb25zCgpgYGAKCiMgVGhlbWluZwoKQ2hhbmdpbmcgdGhlIGxvb2sgb2YgYSBncmFwaGljIGNhbiBiZSBhY2hpZXZlZCB0aHJvdWdoIHRoZSBgdGhlbWUoKWAgbGF5ZXIuCgpUaGVyZSBhcmUgWyJjb21wbGV0ZSB0aGVtZXMiXShodHRwOi8vZ2dwbG90Mi50aWR5dmVyc2Uub3JnL3JlZmVyZW5jZS9nZ3RoZW1lLmh0bWwpIHRoYXQgY29tZSB3aXRoIGBnZ3Bsb3QyYCwgbXkgZmF2b3VyaXRlIGJlaW5nIGB0aGVtZV9id2AgKEkndmUgZ3Jvd24gdGlyZWQgb2YgdGhlIGRlZmF1bHQgZ3JheSBiYWNrZ3JvdW5kLCBzbyBgdGhlbWVfYndgIGlzIHJlZnJlc2hpbmcpLgoKMS4gQ2hhbmdlIHRoZSB0aGVtZSBvZiB0aGUgZm9sbG93aW5nIHBsb3QgdG8gYHRoZW1lX2J3KClgOgoKYGBge3J9CmdncGxvdChpcmlzLCBhZXMoU2VwYWwuV2lkdGgsIFNlcGFsLkxlbmd0aCkpICsKICAgICBmYWNldF93cmFwKH4gU3BlY2llcykgKwogICAgIGdlb21fcG9pbnQoKSArCiAgICAgbGFicyh4ID0gIlNlcGFsIFdpZHRoIiwKICAgICAgICAgIHkgPSAiU2VwYWwgTGVuZ3RoIiwKICAgICAgICAgIHRpdGxlID0gIlNlcGFsIHNpemVzIG9mIHRocmVlIHBsYW50IHNwZWNpZXMiKSArCiAgICB0aGVtZV9idygpICsgCiAgCmBgYAoKMi4gVGhlbiwgY2hhbmdlIGZvbnQgc2l6ZSBvZiBheGlzIGxhYmVscywgYW5kIHRoZSBzdHJpcCBiYWNrZ3JvdW5kIGNvbG91ci4gT3RoZXJzPwoKYGBge3J9CmdncGxvdChpcmlzLCBhZXMoU2VwYWwuV2lkdGgsIFNlcGFsLkxlbmd0aCkpICsKICAgICBmYWNldF93cmFwKH4gU3BlY2llcykgKwogICAgIGdlb21fcG9pbnQoKSArCiAgICAgbGFicyh4ID0gIlNlcGFsIFdpZHRoIiwKICAgICAgICAgIHkgPSAiU2VwYWwgTGVuZ3RoIiwKICAgICAgICAgIHRpdGxlID0gIlNlcGFsIHNpemVzIG9mIHRocmVlIHBsYW50IHNwZWNpZXMiKSArCiAgICB0aGVtZV9idygpICsKICAgIHRoZW1lKGF4aXMudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMC4xNiksCiAgICAgICAgICBzdHJpcC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAib3JhbmdlIikpCmBgYAoKCiMgUGxvdGx5CgpDb25zaWRlciB0aGUgZm9sbG93aW5nIHBsb3Q6CgpgYGB7cn0KKHAgPC0gZ2FwbWluZGVyICU+JSAKICAgICBmaWx0ZXIoY29udGluZW50ICE9ICJPY2VhbmlhIikgJT4lIAogICAgIGdncGxvdChhZXMoZ2RwUGVyY2FwLCBsaWZlRXhwKSkgKwogICAgIGdlb21fcG9pbnQoYWVzKGNvbG91cj1wb3ApLCBhbHBoYT0wLjIpICsKICAgICBzY2FsZV94X2xvZzEwKGxhYmVscz1kb2xsYXJfZm9ybWF0KCkpICsKICAgICBzY2FsZV9jb2xvdXJfZGlzdGlsbGVyKAogICAgICAgICB0cmFucyAgID0gImxvZzEwIiwKICAgICAgICAgYnJlYWtzICA9IDEwXigxOjEwKSwKICAgICAgICAgbGFiZWxzICA9IGNvbW1hX2Zvcm1hdCgpLAogICAgICAgICBwYWxldHRlID0gIkdyZWVucyIKICAgICApICsKICAgICBmYWNldF93cmFwKH4gY29udGluZW50KSArCiAgICAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcz0xMCooMToxMCkpICsKICAgICB0aGVtZV9idygpKQpgYGAKCjEuIENvbnZlcnQgaXQgdG8gYSBgcGxvdGx5YCBvYmplY3QgYnkgYXBwbHlpbmcgdGhlIGBnZ3Bsb3RseSgpYCBmdW5jdGlvbjoKCmBgYHtyfQppbnN0YWxsLnBhY2thZ2VzKCJwbG90bHkiKQpsaWJyYXJ5KHBsb3RseSkKZ2dwbG90bHkocCkKCiNvcgpodG1sd2lkZ2V0czo6U2F2ZVdpZGdldHMoIkxvY2F0IikKCmBgYAoKMi4gWW91IGNhbiBzYXZlIGEgcGxvdGx5IGdyYXBoIGxvY2FsbHkgYXMgYW4gaHRtbCBmaWxlLiBUcnkgc2F2aW5nIHRoZSBhYm92ZToKICAgIC0gTk9URTogcGxvdGx5IGdyYXBocyBkb24ndCBzZWVtIHRvIHNob3cgdXAgaW4gUm1kIF9ub3RlYm9va3NfLCBidXQgdGhleSBkbyB3aXRoIFJtZCBfZG9jdW1lbnRzXy4KCmBgYHtyfQpwICU+JSAKICAgIGdncGxvdGx5KCkgJT4lIAogICAgaHRtbHdpZGdldHM6OnNhdmVXaWRnZXQoIkxPQ0FUSU9OX0dPRVNfSEVSRSIpCmBgYAoKCjMuIFJ1biB0aGlzIGNvZGUgdG8gc2VlIHRoZSBqc29uIGZvcm1hdCB1bmRlcm5lYXRoOgoKYGBge3J9Cmluc3RhbGwucGFja2FnZXMoImxpc3R2aWV3ZXIiKQpwICU+JSAKICAgIGdncGxvdGx5KCkgJT4lIAogICAgcGxvdGx5X2pzb24oKQpgYGAKCgo0LiBDaGVjayBvdXQgY29kZSB0byBtYWtlIGEgcGxvdGx5IG9iamVjdCBmcm9tIHNjcmF0Y2ggdXNpbmcgYHBsb3RfbHkoKWAgLS0gc2NhdHRlcnBsb3Qgb2YgZ2RwUGVyY2FwIHZzIGxpZmVFeHAuCiAgICAtIENoZWNrIG91dCB0aGUgW2NoZWF0IHNoZWV0XShodHRwczovL2ltYWdlcy5wbG90Lmx5L3Bsb3RseS1kb2N1bWVudGF0aW9uL2ltYWdlcy9yX2NoZWF0X3NoZWV0LnBkZikuCgpgYGB7cn0KcGxvdF9seShnYXBtaW5kZXIsIAogICAgICAgICN0aWxkYSBiZWZvcmUgdmFyaWFibGVzCiAgICAgICAgI2Zvcm11bGEgd2l0aCB0aGlzIGFzIHlvdXIgdmFyaWFibGUKICAgICAgICB4ID0gfmdkcFBlcmNhcCwgCiAgICAgICAgeSA9IH5saWZlRXhwLCAKICAgICAgICB0eXBlID0gInNjYXR0ZXIiLAogICAgICAgIG1vZGUgPSAibWFya2VycyIsCiAgICAgICAgb3BhY2l0eSA9IDAuMikgJT4lIAogICAgbGF5b3V0KHhheGlzID0gbGlzdCh0eXBlID0gImxvZyIpKQpgYGAKCjUuIEFkZCBwb3B1bGF0aW9uIHRvIGZvcm0gYSB6LWF4aXMgZm9yIGEgM0QgcGxvdDoKCmBgYHtyfQpwbG90X2x5KGdhcG1pbmRlciwgCiAgICAgICAgeCA9IH5nZHBQZXJjYXAsIAogICAgICAgIHkgPSB+bGlmZUV4cCwgCiAgICAgICAgeiA9IH5wb3AsCiAgICAgICAgdHlwZSA9ICJzY2F0dGVyM2QiLAogICAgICAgIG1vZGUgPSAibWFya2VycyIsCiAgICAgICAgb3BhY2l0eSA9IDAuMikKCiNnZ2FuaW1hdGUhISEgYW5pbWF0ZSBwbG90cywgYWRkIGFlc3RoZXRpYwojc2hpbnk/IFdlIHdpbGwgZ28gb3ZlciB0aGlzIGluIFNUQVQgNTQ3CmBgYAoKCgo=